# 函数式编程
# 函数是Python中的一等公民(first-class citizen),函数本身也是对象,可以赋值给变量,也可以作为函数的参数

# 定义函数
def print_msg(msg):
    print(f'got a message: {msg}')


# 定义函数的调用者,函数可以作为一个参数传入
def print_msg_invoker(f, msg):
    f(msg)


# 定义闭包函数
def print_msg_closure():
    def f(msg):
        print(f'got a message: {msg}')

    return f


if __name__ == '__main__':
    # 将函数赋值给一个变量
    print_msg_var = print_msg
    # 通过变量调用函数,等价于直接调用函数
    print_msg_var('hello')

    # 将函数作为入参传给另一个函数
    print_msg_invoker(print_msg, 'hello')

    # 调用闭包函数,返回一个闭包
    closure = print_msg_closure()
    # 调用闭包
    closure('hello')
